import { useMutation, useQuery, UseQueryResult, useQueryClient, QueryClient } from '@tanstack/react-query';
import sessionServices from '../../../services/sessionServices';
import { ISession } from '../../../types/sessionType';
import { SESSION_KEY } from '../../../constants/queryKeys';
import { notifyError } from '../../../utils/toastify';

/**
 * @function useSessionCRUD - Создает пользовательский хук для выполнения CRUD-операций
 *  над данными сессии.
 * @return {Object} Объект, содержащий данные сессии, состояние загрузки и функцию для
 *  удаления сессии.
 */
export const useSessionCRUD = () => {

    const queryClient: QueryClient = useQueryClient();

    const {
        data,
        isLoading
    }: UseQueryResult<ISession[]> = useQuery({
        queryKey: [SESSION_KEY],
        queryFn: sessionServices.getSessions
    });

    const deleteSession = useMutation({
        mutationFn: (sid: string) => sessionServices.deleteSession(sid),
        onError: (er) => {
            console.error(er);
            notifyError(er.message);
        },
        onSuccess: (_data, variables: string) => {
            queryClient.setQueryData<ISession[]>([SESSION_KEY], oldSessions => oldSessions.filter(session => session.sid !== variables));
        }
    });

    return {
        data,
        isLoading,
        deleteSession,
    };
};